package com.baizhi.controller;

import com.baizhi.entity.Clazz;
import com.baizhi.feign.TagFeign;
import com.baizhi.po.ClazzPO;
import com.baizhi.po.ClazzsPO;
import com.baizhi.po.TagPO;
import com.baizhi.service.ClazzService;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("clazzs")
public class ClazzController {

    @Autowired
    private ClazzService clazzService;
    @Autowired
    private TagFeign tagFeign;

    @GetMapping
    public List<ClazzPO> queryAll() {
        List<Clazz> clazzes = clazzService.queryAll();
        List<ClazzPO> clazzPOS = new ArrayList<>();
        for (Clazz clazz : clazzes) {
            //根据id查询tag
            Long tagid = clazz.getTagid();
            TagPO tagPO = tagFeign.queryById(tagid);
            String path = clazz.getPath();
            String name = clazz.getName();
            ClazzPO clazzPO = new ClazzPO(clazz.getId(), name, path, tagPO);
            clazzPOS.add(clazzPO);
        }
        return clazzPOS;
    }

    @DeleteMapping
    public void delete(@RequestParam Long id) {
        clazzService.delete(id);
    }

    @PostMapping
    public Clazz add(MultipartFile logo, String name, Long tagId) {
        Clazz add = clazzService.add(logo, name, tagId);
        return add;
    }

    @HystrixCommand(fallbackMethod = "HystrixQueryById")
    @GetMapping("{id}")
    public ClazzsPO queryById(@PathVariable Long id) {
        Clazz clazz = clazzService.queryById(id);
        ClazzsPO clazzPO = new ClazzsPO(clazz.getId(), clazz.getName());
        return clazzPO;
    }

    public ClazzsPO HystrixQueryById(@PathVariable Long id) {
        ClazzsPO clazzsPO = new ClazzsPO();
        clazzsPO.setId(id);
        clazzsPO.setName("服务暂时不可用");
        return clazzsPO;
    }

}
